{module, recbifs}.  %% version = 0

{exports, [{class,1},
           {module_info,0},
           {module_info,1},
           {rec,1},
           {rec0,1},
           {tuple,1},
           {zizi,1}]}.

{attributes, [{classlevel,[{class1,1}]},
              {vmt,[{class1,[{method1,2,class1},{method2,2,class1}]}]}]}.

{labels, 24}.


{function, rec, 1, 2}.
  {label,1}.
    {func_info,{atom,recbifs},{atom,rec},1}.
  {label,2}.
    {test,is_tuple,{f,3},[{x,0}]}.
    {test,test_arity,{f,3},[{x,0},4]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,3},[{x,1},{atom,rec}]}.
    return.
  {label,3}.
    {badmatch,{x,0}}.


{function, rec0, 1, 5}.
  {label,4}.
    {func_info,{atom,recbifs},{atom,rec0},1}.
  {label,5}.
    {test,is_tuple,{f,6},[{x,0}]}.
    {test,test_arity,{f,6},[{x,0},4]}.
    {get_tuple_element,{x,0},0,{x,0}}.
    {test,is_eq_exact,{f,6},[{x,0},{atom,rec}]}.
    {move,{atom,true},{x,0}}.
    {jump,{f,7}}.
  {label,6}.
    {move,{atom,false},{x,0}}.
  {label,7}.
    return.


{function, tuple, 1, 9}.
  {label,8}.
    {func_info,{atom,recbifs},{atom,tuple},1}.
  {label,9}.
    {bif,is_tuple,{f,0},[{x,0}],{x,1}}.
    {test,is_eq_exact,{f,11},[{x,1},{atom,true}]}.
    {bif,tuple_size,{f,0},[{x,0}],{x,1}}.
    {test,is_eq_exact,{f,11},[{x,1},{integer,3}]}.
    {bif,element,{f,0},[{integer,1},{x,0}],{x,0}}.
    {test,is_eq_exact,{f,10},[{x,0},{atom,rec}]}.
    return.
  {label,10}.
    {badmatch,{x,0}}.
  {label,11}.
    {badmatch,{x,1}}.


{function, class, 1, 13}.
  {label,12}.
    {func_info,{atom,recbifs},{atom,class},1}.
  {label,13}.
    {allocate_zero,1,1}.
    {bif,tuple_size,{f,0},[{x,0}],{x,1}}.
    {move,{x,0},{y,0}}.
    {test,is_ge,{f,14},[{x,1},{integer,4}]}.
    {bif,element,{f,0},[{integer,2},{x,0}],{x,1}}.
    {bif,tuple_size,{f,0},[{x,1}],{x,1}}.
    {test,is_ge,{f,14},[{x,1},{integer,1}]}.
    {get_tuple_element,{x,0},1,{x,1}}.
    {bif,element,{f,0},[{integer,1},{x,1}],{x,1}}.
    {bif,'=:=',{f,0},[{atom,class1},{x,1}],{x,0}}.
    {jump,{f,15}}.
  {label,14}.
    {move,{atom,false},{x,0}}.
    {jump,{f,16}}.
  {label,15}.
    {test,is_eq_exact,{f,16},[{x,0},{atom,true}]}.
    {move,{y,0},{x,0}}.
    {deallocate,1}.
    return.
  {label,16}.
    {badmatch,{x,0}}.


{function, zizi, 1, 18}.
  {label,17}.
    {func_info,{atom,recbifs},{atom,zizi},1}.
  {label,18}.
    {bif,is_tuple,{f,0},[{x,0}],{x,0}}.
    {test,is_eq_exact,{f,19},[{x,0},{atom,true}]}.
    {move,{atom,ok},{x,0}}.
    return.
  {label,19}.
    {case_end,{x,0}}.


{function, module_info, 0, 21}.
  {label,20}.
    {func_info,{atom,recbifs},{atom,module_info},0}.
  {label,21}.
    {move,{atom,recbifs},{x,0}}.
    {call_ext_only,1,{extfunc,erlang,get_module_info,1}}.


{function, module_info, 1, 23}.
  {label,22}.
    {func_info,{atom,recbifs},{atom,module_info},1}.
  {label,23}.
    {move,{x,0},{x,1}}.
    {move,{atom,recbifs},{x,0}}.
    {call_ext_only,2,{extfunc,erlang,get_module_info,2}}.
